/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUIaVykreslovanie;

import Rozvrh.GeneratorDokumentu;
import Sablony.Funkcia;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.fop.apps.FOPException;
import org.xml.sax.SAXException;



/**
 *  Trieda  vytvárajúca grafické používateľské rozhranie pre LubaEditor
 * @author MartinaHlinková
 */
public class LubaEditorGUI extends JFrame {
    private LubaEditor lubaEditor;
    private InformacnaStruktura.TypZmeny aktivnaZmena;
    private PlatnoRozvrh platno;
    private OknoChyb oknoChyb;
    
    private JScrollPane scrollHorny,scrollDolny;
    
    private boolean panelNastrojov;
    
    private static int MAX_DLZKA_VSTUPU = 64;
    /**
     * Konštruktor triedy LubaEditorGUI
     */
    public LubaEditorGUI(){
        try{
            lubaEditor = new LubaEditor();
            this.aktivnaZmena = null;
            this.panelNastrojov = false;
            this.platno = new PlatnoRozvrh(lubaEditor);
            this.oknoChyb = new OknoChyb();
            initMetoda();
            this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
            
            // prihlasenie WindowEvent pre ukoncenie aplikacie cez "X"
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				akcia_koniec();
			}
		});
            
            this.setVisible(true); // okno zviditelnit
	    this.toFront(); // okno dat do popredia
        }
        catch(Exception e){
            e.printStackTrace();
        }
        
    }
    /**
     * Metóda ktorá vykresluje a obsluhuje prvky editoru
     * @throws IOException 
     */
    private void initMetoda() throws IOException{
        final int OKNO_CAST = 80; // percento z celej plochy obrazovky
        Toolkit t = Toolkit.getDefaultToolkit();
	Dimension d = t.getScreenSize();
		
        this.setLocation(d.width * (100 - OKNO_CAST) / 100 / 2, d.height
				* (100 - OKNO_CAST) / 100 / 2); // zadanie laveho horneho horu
       Dimension scrolD = new Dimension();
      
        this.setSize(d.width * OKNO_CAST / 100, d.height * OKNO_CAST / 100); 
        //this.setPreferredSize(new Dimension());
        this.setResizable(true); // je mozne menit velkost okna
	this.setTitle("Luba - Inteligentny editor pre rozvrh sluzieb"); // titulok
																		// okna
        // ukoncenie cez udalost WindowEvent, ak bude prihlasena
        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        
        this.setLayout(new BorderLayout(2, 2));
        //platno.setPreferredSize(new Dimension(d.width * (100 - OKNO_CAST) / 100 / 2,d.height * OKNO_CAST / 100));
        scrollHorny = new JScrollPane(platno);
        scrollDolny = new JScrollPane(oknoChyb);
        scrollHorny.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollHorny.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollDolny.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,scrollHorny,scrollDolny);
        splitPane.setDividerLocation((d.height * OKNO_CAST / 100)/2);
       
        
        
        getContentPane().add(splitPane, BorderLayout.CENTER);
        platno.addMouseListener(new MouseListener(){

            public void mouseClicked(MouseEvent e) {
                try{
                    if(e == null)return;
                    Point bod = e.getPoint();
                    if(bod != null &&
                            bod.getX() < PlatnoRozvrh.MENO_POLE_SIRKA+lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().getInfo().getPocetDni()*PlatnoRozvrh.DEN_POLE_SIRKA &&
                            bod.getY() < PlatnoRozvrh.DEN_POLE_VYSKA+lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().getInfo().pocetZamestnancov()*PlatnoRozvrh.MENO_POLE_VYSKA &&
                            lubaEditor.getAktivnyProjekt() != null &&
                            lubaEditor.getAktivnyProjekt().getAktivnyRozvrh() != null)
                    {
                        if(bod.getX() < PlatnoRozvrh.MENO_POLE_SIRKA && bod.getY()>PlatnoRozvrh.DEN_POLE_VYSKA){   
                            akcia_vypisInfoZamestnanec(bod);
                        }else if(bod.getY()< PlatnoRozvrh.DEN_POLE_VYSKA && bod.getX()>PlatnoRozvrh.MENO_POLE_SIRKA){
                            if(panelNastrojov == true){
                                akcia_prepniStatusDna(bod);
                            }else{
                                akcia_vypisInfoDen(bod);
                            }
                        }else {
                            akcia_zadelitZmenu(bod,aktivnaZmena);
                        }
                    }
                }catch (Exception ex){
                    return;
                }
            }

            public void mousePressed(MouseEvent e) {
                //throw new UnsupportedOperationException("Not supported yet.");
                return;
            }

            public void mouseReleased(MouseEvent e) {
               // throw new UnsupportedOperationException("Not supported yet.");
                return;
            }

            public void mouseEntered(MouseEvent e) {
               // throw new UnsupportedOperationException("Not supported yet.");
                return;
            }

            public void mouseExited(MouseEvent e) {
               // throw new UnsupportedOperationException("Not supported yet.");
                return;
            }
        
        });
        this.repaint();
        //scroll.repaint();
        
        // lista, butoniky nalavo
	JPanel lubaLista = new JPanel(new FlowLayout(FlowLayout.LEFT));
        
        JButton buttonRannaZmena = new JButton();
        JButton buttonPoobednaZmena = new JButton();
        JButton buttonNocnaTrojZmena = new JButton();
        JButton buttonDennaZmena = new JButton();
        JButton buttonNocnaDvojZmena = new JButton();
        JButton buttonKuchynaZmena = new JButton();
        JButton buttonDovolenka = new JButton();
        JButton buttonVolitelnaZmena = new JButton();
        JButton buttonVymazZmenu = new JButton();
        JButton buttonPrepniStatusDna = new JButton();
        JButton buttonKontrola = new JButton();
        
        buttonRannaZmena.setSize(32, 32);
        buttonPoobednaZmena.setSize(32, 32);
        buttonNocnaTrojZmena.setSize(32, 32);
        buttonDennaZmena.setSize(32, 32);
        buttonNocnaDvojZmena.setSize(32, 32);
        buttonKuchynaZmena.setSize(32, 32);
        buttonDovolenka.setSize(32, 32);
        buttonVolitelnaZmena.setSize(32, 32);
        buttonVymazZmenu.setSize(32, 32);
        buttonPrepniStatusDna.setSize(32, 32);
        buttonKontrola.setSize(64, 64);
        
        
        
   
       /* ImageIcon iRanna = new ImageIcon(".\\src\\ikony\\IkonaRanna.gif");
        ImageIcon iPoobedna = new ImageIcon(".\\src\\ikony\\IkonaPoobedna.gif");
        ImageIcon iNocnaTrojZmena = new ImageIcon(".\\src\\ikony\\IkonaNocnaTrojzmenna.gif");
        ImageIcon iDenna = new ImageIcon(".\\src\\ikony\\IkonaDenna.gif");
        ImageIcon iNocnaDvojZmena = new ImageIcon(".\\src\\ikony\\IkonaNocnaDvojzmenna.gif");
        ImageIcon iKuchyna = new ImageIcon(".\\src\\ikony\\IkonaKuchyna.gif");
        ImageIcon iDovolenka = new ImageIcon(".\\src\\ikony\\IkonaDovolenka.gif");
        ImageIcon iVolitelnaZmena = new ImageIcon(".\\src\\ikony\\IkonaVolitelnaZmena.gif");
        ImageIcon iVymaz = new ImageIcon(".\\src\\ikony\\IkonaVymaz.gif");
        ImageIcon iPrepniStatusDna = new ImageIcon(".\\src\\ikony\\IkonaPrepniStatusDna.gif");
        ImageIcon iKontrola = new ImageIcon(".\\src\\ikony\\IkonaKontrola.gif");*/
        
        //String path = getClass().getClassLoader().getResource("\\ikony\\IkonaRanna.gif").getPath();
        //System.out.println(path);
        
        
        ImageIcon iRanna = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaRanna.gif")));
        ImageIcon iPoobedna = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaPoobedna.gif")));
        ImageIcon iNocnaTrojZmena = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaNocnaTrojzmenna.gif")));
        ImageIcon iDenna = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaDenna.gif")));
        ImageIcon iNocnaDvojZmena = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaNocnaDvojzmenna.gif")));
        ImageIcon iKuchyna = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaKuchyna.gif")));
        ImageIcon iDovolenka = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaDovolenka.gif")));
        ImageIcon iVolitelnaZmena = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaVolitelnaZmena.gif")));
        ImageIcon iVymaz = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaVymaz.gif")));
        ImageIcon iPrepniStatusDna = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaPrepniStatusDna.gif")));
        ImageIcon iKontrola = new ImageIcon(t.getImage(getClass().getResource("/ikony/IkonaKontrola.gif")));
        /*ImageIcon iRanna = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaRanna.gif"));
        ImageIcon iPoobedna = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaPoobedna.gif"));
        ImageIcon iNocnaTrojZmena = new ImageIcon(getClass().getClassLoader().getResource("ikony\\IkonaNocnaTrojzmenna.gif"));
        ImageIcon iDenna = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaDenna.gif"));
        ImageIcon iNocnaDvojZmena = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaNocnaDvojzmenna.gif"));
        ImageIcon iKuchyna = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaKuchyna.gif"));
        ImageIcon iDovolenka = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaDovolenka.gif"));
        ImageIcon iVolitelnaZmena = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaVolitelnaZmena.gif"));
        ImageIcon iVymaz = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaVymaz.gif"));
        ImageIcon iPrepniStatusDna = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaPrepniStatusDna.gif"));
        ImageIcon iKontrola = new ImageIcon(getClass().getClassLoader().getResource("\\ikony\\IkonaKontrola.gif"));*/
        
        
        
	iRanna.setDescription("Ikona pre rannú službu");
        iPoobedna.setDescription("Ikona pre poobednú službu");
        iNocnaTrojZmena.setDescription("Ikona pre nočnú 8-hodinovú službu");
        iDenna.setDescription("Ikona pre dennú službu");
        iNocnaDvojZmena.setDescription("Ikona pre nočnú 12-hodinovú službu");
        iKuchyna.setDescription("Ikona pre zmenuv kuchyni pre nekuchárov");
        iDovolenka.setDescription("Ikona pre dovolenku"); 
        iVolitelnaZmena.setDescription("Ikona pre zmenu voliteľneho času"); 
        iVymaz.setDescription("Vymazanie zmeny");
        iPrepniStatusDna.setDescription("Prepni status dňa");
        iKontrola.setDescription("Kontrola rozvrhu");
        
        buttonRannaZmena.setIcon(iRanna);
        buttonPoobednaZmena.setIcon(iPoobedna);
        buttonNocnaTrojZmena.setIcon(iNocnaTrojZmena);
        buttonDennaZmena.setIcon(iDenna);
        buttonNocnaDvojZmena.setIcon(iNocnaDvojZmena);
        buttonKuchynaZmena.setIcon(iKuchyna);
        buttonDovolenka.setIcon(iDovolenka);
        buttonVolitelnaZmena.setIcon(iVolitelnaZmena);
        buttonVymazZmenu.setIcon(iVymaz);
        buttonPrepniStatusDna.setIcon(iPrepniStatusDna);
        buttonKontrola.setIcon(iKontrola);
        
        /*buttonRannaZmena.setText("Ranna");
        buttonPoobednaZmena.setText("Poobedná");
        buttonNocnaTrojZmena.setText("Nočná3");
        buttonDennaZmena.setText("Denná");
        buttonNocnaDvojZmena.setText("Nočná2");
        buttonKuchynaZmena.setText("Kuchyňa");
        buttonDovolenka.setText("Dovolenka");
        buttonVolitelnaZmena.setText("Voliteľná");
        buttonVymazZmenu.setText("Vymaž");
        buttonPrepniStatusDna.setText("Prepni");
        buttonKontrola.setText("Kontrola");*/
        
        lubaLista.add(buttonRannaZmena);
        lubaLista.add(buttonPoobednaZmena);
        lubaLista.add(buttonNocnaTrojZmena);
        lubaLista.add(buttonDennaZmena);
        lubaLista.add(buttonNocnaDvojZmena);
        lubaLista.add(buttonKuchynaZmena);
        lubaLista.add(buttonDovolenka);
        lubaLista.add(buttonVolitelnaZmena);
        lubaLista.add(buttonVymazZmenu);
        lubaLista.add(buttonPrepniStatusDna);
        lubaLista.add(buttonKontrola);
        buttonRannaZmena.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny.RANNA);
					}
				});
        buttonPoobednaZmena.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny.POOBEDNA);
					}
				});
        buttonNocnaTrojZmena.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny.NOCNA);
					}
				});
        buttonDennaZmena.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny.DENNA);
					}
				});
        buttonNocnaDvojZmena.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny.NOCNA_DLHA);
					}
				});
        buttonKuchynaZmena.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny.KUCHYNA);
					}
				});
        buttonDovolenka.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny.DOVOLENKA);
					}
				});
        buttonVolitelnaZmena.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny.NASTAVITELNA);
					}
				});
        buttonVymazZmenu.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_nastavAktivnuZmenu(null);
					}
				});
        buttonPrepniStatusDna.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_prepniPanelNastrojov();
					}
				});
        buttonKontrola.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_kontrolaRozvrhu();
					}
				});
        

	// lista bude hore
	lubaLista.setBackground(Color.LIGHT_GRAY);
	this.add(BorderLayout.NORTH, lubaLista);
        
        // lista pre menu
	JMenuBar lubaMenu = new JMenuBar();
	this.setJMenuBar(lubaMenu);
        
        JMenu menuSubor = new JMenu("Súbor     ");
        //JMenu menuEditacia = new JMenu("Editácia     ");
        JMenu menuZamestnanci = new JMenu("Zamestnanci     ");
        JMenu menuKlienti = new JMenu("Klienti     ");
        JMenu menuPomoc = new JMenu("Pomoc     ");
        
        lubaMenu.add(menuSubor);
        //lubaMenu.add(menuEditacia);
        lubaMenu.add(menuZamestnanci);
        lubaMenu.add(menuKlienti);
        lubaMenu.add(menuPomoc);
        
        JMenuItem menuItemSubor_Novy = new JMenuItem("Nový projekt rozvrhov");
        JMenuItem menuItemSubor_Uloz = new JMenuItem("Ulož projekt rozvrhov");
        JMenuItem menuItemSubor_UlozAko = new JMenuItem("Ulož projekt ako...");
        JMenuItem menuItemSubor_Nacitaj = new JMenuItem("Načítaj projekt rozvrhov");
        JMenuItem menuItemSubor_Exportuj = new JMenuItem("Exportuj do PDF ");
        
        
        JMenuItem menuItemEditacia_PridajRozvrh = new JMenuItem("Pridaj ďalší mesiac");
        
        JMenuItem menuItemZamestnanci_Novy = new JMenuItem("Nová šablóna zamestnancov");
        JMenuItem menuItemZamestnanci_Nacitaj = new JMenuItem("Načítaj šablónu zamestnancov");
        
        JMenuItem menuItemKlienti_Novy = new JMenuItem("Nová šablóna klientov");
        JMenuItem menuItemKlienti_Nacitaj = new JMenuItem("Načítaj šablónu klientov");
        
        menuItemSubor_Novy.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						akcia_nastavNovyProjekt();
					}
				});
        
        menuItemSubor_Uloz.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						akcia_ulozProjekt();
					}
				});
        
        menuItemSubor_UlozAko.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						akcia_ulozProjektAko();
					}
				});
        
        menuItemSubor_Nacitaj.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						akcia_nacitajProjekt();
					}
				});
        
        menuItemSubor_Exportuj.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						akcia_exportujProjekt();
					}
				});
        
    
        
        menuItemZamestnanci_Novy.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_zamestnanci_novaSablona();
					}
				});
        
        menuItemZamestnanci_Nacitaj.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_zamestnanci_nacitajSablonu();
					}
				});
        
        menuItemKlienti_Novy.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_klienti_novaSablona();
					}
				});
        
        menuItemKlienti_Nacitaj.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
						akcia_klienti_nacitajSablonu();
					}
				});
        menuSubor.add(menuItemSubor_Novy);
        menuSubor.add(menuItemSubor_Uloz);
        menuSubor.add(menuItemSubor_UlozAko);
        menuSubor.add(menuItemSubor_Nacitaj);
         menuSubor.add(menuItemSubor_Exportuj);
        menuZamestnanci.add(menuItemZamestnanci_Novy);
        menuZamestnanci.add(menuItemZamestnanci_Nacitaj);
        menuKlienti.add(menuItemKlienti_Novy);
        menuKlienti.add(menuItemKlienti_Nacitaj);
    }
    /**
     * Metóda, ktorá podľa bodu, kde sa kliklo zobrazí informácie o danom dni
     * @param bod bod, kde sa kliklo
     */
    private void akcia_vypisInfoDen(Point bod){
        int cisloDna = ((int)((bod.getX()-PlatnoRozvrh.MENO_POLE_SIRKA)/PlatnoRozvrh.DEN_POLE_SIRKA))+1;
        if(cisloDna < 1)return;
        InformacnaStruktura.CharakterDna charakter = this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().getInfo().getCharakterDni()[cisloDna-1];
        int koeficientKlientov = this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().getInfo().getKlientiVDnoch()[cisloDna-1];
        String eol = System.getProperty("line.separator");
        JOptionPane.showMessageDialog(null,"Charakter dňa:\t"+charakter.toString()+eol+
                                           "Koeficient klientov:\t"+koeficientKlientov+eol);
    }
    /**
     * Metóda, ktorá podľa bodu, kde sa kliklo zobrazí informácia o danom zamestnancovi
     * @param bod 
     */
    private void akcia_vypisInfoZamestnanec(Point bod){
        Sablony.Zamestnanec zamestnanec = this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().getZamestnanecPodlaRiadku(bod);
        Rozvrh.NastavenieZamestnancaMesiac nastavenie = 
        this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().getInfo().getNastavenieZamestnancov().get(zamestnanec.getIDZamestnanca());
        String eol = System.getProperty("line.separator");
        String vypis = "Meno: \t"+zamestnanec.getMenoZamestnanca()+eol+
                       "Priezvisko: \t"+zamestnanec.getPriezviskoZamestnanca()+eol+
                       "Funkcia: \t"+zamestnanec.getFunkciaZamestnanca().toString()+eol+
                       "Sila: \t"+zamestnanec.getSilaZamestnanca().toString()+eol+eol;
        vypis = vypis+ "Milulé obdobie: \t"+nastavenie.getTypSaldaMinulost()+" "+nastavenie.getPrenostMinulehoObdobia()+eol+
                       "Budúce obdobie: \t"+nastavenie.getTypSaldaBuducnost()+" "+nastavenie.getPrenostBuducehoObdobia()+eol+
                       "Počet odpracovaných hodín: \t"+nastavenie.getTentoMesiac();
                
                
        
        JOptionPane.showMessageDialog(null,vypis);
                 
    }
    /**
     * Metóda, ktorá podľa bodu, kde sa kliklo a typu zmeny, ktorá bola nastavená na kurzore,
     * zadelí zmenu danému zamestnancovi v danom dni 
     * @param bod   bod, kde sa kliklo
     * @param typ typ zmeny, ktorá má byť zadelená
     */
    private void akcia_zadelitZmenu(Point bod,InformacnaStruktura.TypZmeny typ){
        
        if(typ == InformacnaStruktura.TypZmeny.NASTAVITELNA){
            DialogNastavitelnejZmeny dialog = new DialogNastavitelnejZmeny(null);
            dialog.show();
            InformacnaStruktura.CasBezDatumu casOd = dialog.getCasOd();
            InformacnaStruktura.CasBezDatumu casDo = dialog.getCasDo();
            Rozvrh.ZmenaNastavitelnejDlzky zmena = new Rozvrh.ZmenaNastavitelnejDlzky(casOd,casDo);
            this.platno.zadelZmenu(bod, zmena);
        
        }else if(typ != null){
            Sablony.Funkcia funkcia = this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().getZamestnanecPodlaRiadku(bod).getFunkciaZamestnanca();
            
            Rozvrh.StandardnaZmena zmena = new Rozvrh.StandardnaZmena(funkcia,typ);
            
            this.platno.zadelZmenu(bod, zmena);
        }else{
            this.platno.zadelZmenu(bod, null);
        }
        
    }
    /**
     * Metóda, ktorá nastaví aktívny typ zmeny na kurzor
     * @param zmena zmena, ktorá bude aktívna na kurzore
     */
    private void akcia_nastavAktivnuZmenu(InformacnaStruktura.TypZmeny zmena){
        this.aktivnaZmena = zmena;
        this.panelNastrojov = false;
    }
    
    /**
     * Metóda, ktorá prepína medzi dvoma typmi panelov nástrojov
     */
    private void akcia_prepniPanelNastrojov(){
        this.panelNastrojov = !(this.panelNastrojov);
    }
    /**
     * Metóda, ktorá zmení status dňa z voľny na pracovný alebo naopak. Konkrétny 
     * deň sa určí podľa zadaného bodu. 
     * @param bod bod, podľa ktorého sa určí, ktorému dňu sa má zmeniť status
     */
    private void akcia_prepniStatusDna(Point bod){
        this.platno.prepniStatusDna(bod);
    }
    /**
     * Metóda, ktorá získa vsetky chybové textové reťazce z kontroly rozvrhu a pošle ich oknu chyb.
     */
    private void akcia_kontrolaRozvrhu(){
        HashSet<String> kontrolneVypisy = this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().skontrolujRozvrh();
        this.oknoChyb.vypisChyby(kontrolneVypisy);
    }
    /**
     * Metóda, ktorá ukoncí prácu s editorom.
     */
    private void akcia_koniec() {
		if (JOptionPane.showConfirmDialog(this,
				"Chceš skutočne ukončiť program", "Ukončenie",
				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
			// this.dispose();
			System.exit(0);
		}
		this.repaint();
	}
 
    /**
     * Metóda, ktorá uloží rozvrhy do trvalej pamäti.
     */
    private void akcia_ulozProjekt(){
        if(lubaEditor.getAktivnyProjekt()== null){
            JOptionPane.showMessageDialog(null,"Nie je otvorený rozvrh.");
        }else{
            this.lubaEditor.getAktivnyProjekt().ulozProjekt(null);
        }
    }
    
    private void akcia_ulozProjektAko(){
        if(lubaEditor.getAktivnyProjekt()== null){
            JOptionPane.showMessageDialog(null,"Nie je otvorený rozvrh.");
            return;
        }
         JFileChooser fileChooser = new JFileChooser(".");
         int returnVal = fileChooser.showSaveDialog(null);
         if (returnVal == JFileChooser.APPROVE_OPTION)
            {
                System.out.println(fileChooser.getSelectedFile());
               int ok = this.lubaEditor.getAktivnyProjekt().ulozProjekt(fileChooser.getSelectedFile().toString()); 
               if(ok == -1){
                   JOptionPane.showMessageDialog(null,"Nebolo možné vytvoriť nový súbor. Súbor s daným názvom už existuje.");
               }

        }
    }
    
    /**
     * Metóda, ktorá exportuje rozvrh, s ktorým sa práve pracuje, do formátu PDF. 
     */
    private void akcia_exportujProjekt(){
        if(this.lubaEditor == null || this.lubaEditor.getAktivnyProjekt() == null ||this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh() == null ){
            return;
        }
        this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh().skontrolujRozvrh();
        Rozvrh.GeneratorDokumentu generator = new Rozvrh.GeneratorDokumentu(this.lubaEditor.getAktivnyProjekt().getAktivnyRozvrh(),this.lubaEditor.getAktivnyProjekt().getNazov());
        generator.generujFO();
        try {
            generator.generujPDF();
        } catch (FOPException ex) {
            Logger.getLogger(GeneratorDokumentu.class.getName()).log(Level.SEVERE, null, ex);
        }catch (TransformerConfigurationException ex) {
            Logger.getLogger(GeneratorDokumentu.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ConfigurationException | TransformerException ex) {
            Logger.getLogger(GeneratorDokumentu.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SAXException ex) {
            Logger.getLogger(GeneratorDokumentu.class.getName()).log(Level.SEVERE, null, ex);
        }catch (FileNotFoundException ex) {
            Logger.getLogger(GeneratorDokumentu.class.getName()).log(Level.SEVERE, null, ex);
        }catch (IOException ex) {
            Logger.getLogger(GeneratorDokumentu.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    /**
     * Metóda, ktorá načíta rozvrhy z trvalej pamäti.
     */
    private void akcia_nacitajProjekt(){
         try{
                JFileChooser fileChooser = new JFileChooser(".");
                FileFilter projektFilter = new FilterXML(null, new String[] { "xpr" });
                fileChooser.setFileFilter(projektFilter);
                fileChooser.addChoosableFileFilter(projektFilter);
                
    
                int returnVal = fileChooser.showOpenDialog(null);
 
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fileChooser.getSelectedFile();
                 
                    Rozvrh.LubaProjekt nacitanyProjekt = Rozvrh.LubaProjekt.nacitajProject(file);
                    if(nacitanyProjekt == null){
                        JOptionPane.showMessageDialog(null,"Došlo k chybe pri načítaní suboru. Súbor bol nespravne zapísany.");
                    }else{
                        this.lubaEditor.nastavProjekt(nacitanyProjekt);
                        this.platno.repaint();
                        this.scrollDolny.repaint();
                        this.scrollHorny.repaint();
                        this.repaint();
                       
                    }
                } 
                
                this.repaint();
           }
           catch (HeadlessException ex){
                ex.printStackTrace();
            }
            catch (Exception e){
                e.printStackTrace();
            }
    }
    /**
     * Metóda, ktorá dá užívateľovi možnosť vytvoriť nové rozvrhy a nastaviť ich vlastnosti.
     */
    private void akcia_nastavNovyProjekt(){
        try{               
                DialogNovehoProjektu projekt = new DialogNovehoProjektu(this);
                projekt.show();
                String nazov = projekt.getNazov();
                File klienti = projekt.getSablonaKlientov();
                File zamestnanci = projekt.getSablonaZamestnancov();
                Date pociatok = projekt.getPociatok();
                
                if(nazov == null || nazov.isEmpty()){
                    JOptionPane.showMessageDialog(this,"Nezadali ste názov.");
                    this.repaint();
                    return;
                }
                
                if(nazov.contains("\\") || nazov.contains("/") || nazov.contains(".") || nazov.contains("%") ){
                    JOptionPane.showMessageDialog(this,"Názov šablóny obsahuje nepovolené znaky(. / % ).");
                    this.repaint();
                    return;
                }
                
                if(klienti == null || zamestnanci == null || pociatok == null){
                    JOptionPane.showMessageDialog(this,"Nesprávne vyplnenie zadania projektu");
                    this.repaint();
                    return;
                }
                
                Sablony.SablonaKlientov sablonaKlientov = Sablony.SablonaKlientov.nacitajSablonu(klienti);
                Sablony.SablonaZamestnancov sablonaZamestnancov = Sablony.SablonaZamestnancov.nacitajSablonu(zamestnanci);
                if(sablonaKlientov == null){
                    JOptionPane.showMessageDialog(this,"Zadali ste nesprávny súbor so šablonou klientov alebo došlo k znehodnoteniu dát.");
                    this.repaint();
                    return;
                }
                
                if(sablonaZamestnancov == null){
                    JOptionPane.showMessageDialog(this,"Zadali ste nesprávny súbor so šablonou zamestnancov alebo došlo k znehodnoteniu dát.");
                    this.repaint();
                    return;
                }
                
                if(pociatok == null){
                    JOptionPane.showMessageDialog(this,"Zadali ste nesprávny rok a mesiac.");
                    this.repaint();
                    return;
                }
                DialogNastaveniaZamestnancov dialogZamestnancov = new DialogNastaveniaZamestnancov(this,sablonaZamestnancov);
                dialogZamestnancov.show();
                HashMap<Integer,Integer[]> nastavenieZamestnancov = dialogZamestnancov.getOdpovede();
                this.lubaEditor.nastavProjekt(new Rozvrh.LubaProjekt(nazov,sablonaKlientov,sablonaZamestnancov,nastavenieZamestnancov,pociatok));
                this.repaint();
                
            }
            catch (HeadlessException ex){
                ex.printStackTrace();
            }
            catch (Exception e){
                e.printStackTrace();
            }
    }
    /**
     * Metóda, ktorá načíta šablónu zamestnancov
     */
    private void akcia_zamestnanci_nacitajSablonu(){
        try{
                JFileChooser fileChooser = new JFileChooser(".");
                FileFilter zamestnanciFilter = new FilterXML(null, new String[] { "xsz" });
                fileChooser.setFileFilter(zamestnanciFilter);
                fileChooser.addChoosableFileFilter(zamestnanciFilter);
    
                int returnVal = fileChooser.showOpenDialog(null);
 
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fileChooser.getSelectedFile();
                 
                    Sablony.SablonaZamestnancov nacitanaSablona = Sablony.SablonaZamestnancov.nacitajSablonu(file);
                    if(nacitanaSablona == null){
                        JOptionPane.showMessageDialog(null,"Došlo k chybe pri načítaní suboru. Súbor bol nespravne zapísany.");
                    }else{
                       
                        MiniGUIZamestnanci lubaMiniZamestnanci = new MiniGUIZamestnanci(nacitanaSablona.getNazov(),nacitanaSablona);
                    }
                    
                } 
           }
           catch (HeadlessException ex){
                ex.printStackTrace();
            }
            catch (Exception e){
                e.printStackTrace();
            }
    }
    /**
     * Metóda, ktorá vytvorí novú šablónu zamestnancov
     */
    private void akcia_zamestnanci_novaSablona(){
        try{
		String menoSablony = JOptionPane.showInputDialog(this,"Zadajte názov novej šablóny");
		this.repaint();
 
                if(menoSablony == null || menoSablony.isEmpty()){
                    JOptionPane.showMessageDialog(this,"Nezadali ste názov.");
                    this.repaint();
                    return;
                }
                
                if(menoSablony.contains("\\") || menoSablony.contains("/") || menoSablony.contains(".") || menoSablony.contains("%") ){
                    JOptionPane.showMessageDialog(this,"Názov šablóny obsahuje nepovolené znaky(. / % ).");
                    this.repaint();
                    return;
                }
                
               
                MiniGUIZamestnanci lubaMiniZamestnanci = new MiniGUIZamestnanci(menoSablony);
                
            }
            catch (HeadlessException ex){
                ex.printStackTrace();
            }
            catch (Exception e){
                e.printStackTrace();
            }
    }
    /**
     * Metóda, ktorá vytvorí novú šablónu klientov
     */
    private void akcia_klienti_novaSablona(){
            try{
		String menoSablony = JOptionPane.showInputDialog(this,"Zadajte názov novej šablóny");
		this.repaint();
                
                if(menoSablony == null || menoSablony.isEmpty()){
                    JOptionPane.showMessageDialog(this,"Nezadali ste názov.");
                    this.repaint();
                    return;
                }
                
                if(menoSablony.contains("\\") || menoSablony.contains("/") || menoSablony.contains(".") || menoSablony.contains("%") ){
                    JOptionPane.showMessageDialog(this,"Názov šablóny obsahuje nepovolené znaky(. / % ).");
                    this.repaint();
                    return;
                }
                
                this.lubaEditor.nastavKlientovMini(new Sablony.SablonaKlientov(menoSablony));
                MiniGUIKlienti lubaMiniKlienti = new MiniGUIKlienti(menoSablony);
                
            }
            catch (HeadlessException ex){
                ex.printStackTrace();
            }
            catch (Exception e){
                e.printStackTrace();
            }
	}
    /**
     * Metóda, ktorá  načíta šablónu klientov
     */
       private void akcia_klienti_nacitajSablonu(){
           try{
                JFileChooser fileChooser = new JFileChooser(".");
                FileFilter klientiFilter = new FilterXML(null, new String[] { "xsk" });
                fileChooser.setFileFilter(klientiFilter);
                fileChooser.addChoosableFileFilter(klientiFilter);
                
    
                int returnVal = fileChooser.showOpenDialog(null);
 
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fileChooser.getSelectedFile();
                 
                    Sablony.SablonaKlientov nacitanaSablona = Sablony.SablonaKlientov.nacitajSablonu(file);
                    if(nacitanaSablona == null){
                        JOptionPane.showMessageDialog(null,"Došlo k chybe pri načítaní suboru. Súbor bol nespravne zapísany.");
                    }else{
                        this.lubaEditor.nastavKlientovMini(nacitanaSablona);
                        MiniGUIKlienti lubaMiniKlienti = new MiniGUIKlienti(nacitanaSablona.getNazov(),nacitanaSablona);
                    }
                    
                } 
           }
           catch (HeadlessException ex){
                ex.printStackTrace();
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
       
       private class FilterXML  extends FileFilter{
            String description;
            String extensions[];

         public FilterXML(String description, String extensions[]) {
            if (description == null) {
                this.description = extensions[0] + "{ " + extensions.length + "} ";
            } else {
                this.description = description;
            }
            this.extensions = (String[]) extensions.clone();
           for(int i = 0; i< extensions.length;i++){
               extensions[i] = extensions[i].toLowerCase();
           }
           
  }
        @Override
        public boolean accept(File file) {
            if (file.isDirectory()) {
                return true;
            } else {
                String path = file.getAbsolutePath().toLowerCase();
                for (int i = 0, n = extensions.length; i < n; i++) {
                    String extension = extensions[i];
                    if ((path.endsWith(extension) && (path.charAt(path.length() - extension.length() - 1)) == '.')) {
                        return true;
                    }
                }
            }
            return false;
        }

        @Override
        public String getDescription() {
            return this.description;
        }
       
       }
       
       private class DialogNovehoProjektu extends Dialog{
           TextField nazovField, rokField;
           File sablonaZamestnancov,sablonaKlientov;
           JLabel cestaZamestnanci, cestaKlienti;
           Choice mesiacChoice;
           DialogNovehoProjektu(JFrame vlastnik){
                super(vlastnik, "Dialog nového projektu", true);
                this.setLayout(new GridLayout(5,3,5,5));
                this.setSize(600,300);
                this.setModal(true);
                
                //prvy riadok layout
                
                this.add(new JLabel("Názov projektu"));
                nazovField = new TextField(MAX_DLZKA_VSTUPU);
                this.add(nazovField);
                this.add(new JLabel(""));
                
                //druhy riadok layout
                
                this.add(new JLabel("Šablóna zamestnancov"));
                cestaZamestnanci = new JLabel("");
                this.add(cestaZamestnanci);
                JButton buttonZamestnanci = new JButton("Nájdi šablónu zamestnancov");
                this.add(buttonZamestnanci);
                
                buttonZamestnanci.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
                                            
                                                File sablonaZamestnanci = akcia_nacitajSablonu("xsz");
                                                if(sablonaZamestnanci != null){
                                                    String vyber = sablonaZamestnanci.getPath();
                                                    cestaZamestnanci.setText(vyber);
                                                    cestaZamestnanci.repaint();
                                                }
                                                
					}
				});
                
                //treti riadok layout
                
                this.add(new JLabel("Šablóna klientov"));
                cestaKlienti = new JLabel("");
                this.add(cestaKlienti);
                JButton buttonKlienti = new JButton("Nájdi šablónu klientov");
                this.add(buttonKlienti);
                
                buttonKlienti.addActionListener(new ActionListener() { 
																	
					public void actionPerformed(ActionEvent e) {
                                            
                                                File sablonaKlienti = akcia_nacitajSablonu("xsk");
                                                if(sablonaKlienti != null){
                                                    String vyber = sablonaKlienti.getPath();
                                                    cestaKlienti.setText(vyber);
                                                    cestaKlienti.repaint();
                                                }
                                                
					}
				});
                

                
                //stvrty riadok layout
                
                this.add(new JLabel("Rok a mesiac prveho rozvrhu"));
                rokField = new TextField(4);
                mesiacChoice = new Choice();
                InformacnaStruktura.Mesiac[] mesiace = InformacnaStruktura.Mesiac.values();
                for(InformacnaStruktura.Mesiac iterator :mesiace){
                    mesiacChoice.addItem(iterator.toString());
                }
                this.add(rokField);
                this.add(mesiacChoice);
                
                //piaty riadok layout
                
                JButton buttonPotvrd = new JButton("Potvrď");
                JButton buttonOdid = new JButton("Odíď");
                this.add(buttonPotvrd);
                this.add(buttonOdid);
                
                 buttonPotvrd.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent e) {
                                dispose();
			}
		});
                 
                 buttonOdid.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent e) {
                                nazovField = null; 
                                rokField = null;
                                sablonaZamestnancov = null;
                                sablonaKlientov = null;
                                cestaZamestnanci = null;
                                cestaKlienti = null;
                                mesiacChoice = null;
                                dispose();
			}
		});
                
                
           }
           
           public File akcia_nacitajSablonu(String pripona){
               File file = null;
                try{
                    JFileChooser fileChooser = new JFileChooser(".");
                    String[] priponaS = new String[] { pripona };
                    FileFilter zamestnanciFilter = new LubaEditorGUI.FilterXML(null,priponaS);
                    fileChooser.addChoosableFileFilter(zamestnanciFilter);
    
                    int returnVal = fileChooser.showOpenDialog(null);
 
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                        file = fileChooser.getSelectedFile();
                        
                        if(file == null){
                            JOptionPane.showMessageDialog(null,"Došlo k chybe pri načítaní súboru.");
                        }
                    }

                } 
           catch (HeadlessException ex){
                ex.printStackTrace();
            }
            catch (Exception e){
                e.printStackTrace();
            }
                return file;
           }
           
           public String getNazov(){
               if(nazovField == null)return null;
               return nazovField.getText();
           }
           
           public File getSablonaZamestnancov(){
               if(cestaZamestnanci == null)return null;
               File navrat = new File(cestaZamestnanci.getText());  
               return navrat;
           }
           
           public File getSablonaKlientov(){
               if(cestaKlienti == null)return null;
               File navrat = new File(cestaKlienti.getText());  
               return navrat;
           }
           
           public InformacnaStruktura.Mesiac getMesiac(){
               if(mesiacChoice ==null || mesiacChoice.getSelectedItem() == null )return null;
                InformacnaStruktura.Mesiac[] mesiace = InformacnaStruktura.Mesiac.values();
                for(InformacnaStruktura.Mesiac iterator :mesiace){
                    if(mesiacChoice.getSelectedItem().toString().equals(iterator.toString())){
                        return iterator;
                    }
                }
                return null;
           }
           
           public int getRok(){
               int navrat = -1;
               try{
                   if(rokField == null){return -1;}
                   navrat = Integer.parseInt(rokField.getText());
                   if(navrat < 1900 || navrat >2999)return -1;
                  
               }
               catch(Exception e){
                //e.printStackTrace();
                   return -1;
               }
                return navrat;
           }
           
           public Date getPociatok(){
               int rok = this.getRok();
               InformacnaStruktura.Mesiac mesiac = this.getMesiac();
               
               if(rok < 0 || mesiac == null){
                   JOptionPane.showMessageDialog(null,"Nesprávne vyplnenie prvého mesiaca");
                   return null;
                   
               }
               Date navrat = new Date(rok -1900, mesiac.getPoradieMesiaca(),1,0,0);
               return navrat;
           }
       }
       private class DialogNastavitelnejZmeny extends Dialog{
           Choice hodinaOd,hodinaDo,minutaOd,minutaDo;
           DialogNastavitelnejZmeny(JFrame vlastnik){
               super(vlastnik, "Dialog nastavitelnej zmeny", true);
               this.setLayout(new GridLayout(4,3,5,5));
               this.setSize(300,200);
               this.setModal(true);
               
               //prvy riadok
               this.add(new JLabel(""));
               this.add(new JLabel("Hodiny"));
               this.add(new JLabel("Minuty"));
               
               //druhy riadok
                this.add(new JLabel("Od doby"));
                
                this.hodinaOd = new Choice();
                for(int i = 0; i<24; i++){
                        this.hodinaOd.addItem(""+i);
                    }
                this.add(this.hodinaOd);
                
                this.minutaOd = new Choice();
                for(int i = 0; i<60; i++){
                        this.minutaOd.addItem(""+i);
                    }
                this.add(this.minutaOd);
                
                //treti riadok
                this.add(new JLabel("Do doby"));
                
                this.hodinaDo = new Choice();
                for(int i = 0; i<24; i++){
                        this.hodinaDo.addItem(""+i);
                    }
                this.add(this.hodinaDo);
                
                this.minutaDo = new Choice();
                for(int i = 0; i<60; i++){
                        this.minutaDo.addItem(""+i);
                    }
                this.add(this.minutaDo);
                
                //stvrty riadok
                JButton buttonPotvrd = new JButton("Potvrď");
                JButton buttonOdid = new JButton("Odíď");
                this.add(buttonPotvrd);
                this.add(buttonOdid);
                
                 buttonPotvrd.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						dispose();
					}
				});
                 buttonOdid.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						hodinaOd = null;
                                                hodinaDo = null;
                                                minutaOd = null;
                                                minutaDo = null;
                                                dispose();
					}
				});
                
           }
           
           public InformacnaStruktura.CasBezDatumu getCasOd(){
               int hodina = Integer.parseInt(this.hodinaOd.getSelectedItem());
               int minuta = Integer.parseInt(this.minutaOd.getSelectedItem());
               return new InformacnaStruktura.CasBezDatumu(hodina,minuta);
           }
           
           public InformacnaStruktura.CasBezDatumu getCasDo(){
               int hodina = Integer.parseInt(this.hodinaDo.getSelectedItem());
               int minuta = Integer.parseInt(this.minutaDo.getSelectedItem());
               return new InformacnaStruktura.CasBezDatumu(hodina,minuta);
           }
       }
       
       private class DialogNastaveniaMesiaca extends Dialog{
           
           
           DialogNastaveniaMesiaca(JFrame vlastnik,Rozvrh.LubaProjekt projekt){
               super(vlastnik, "Dialog nastavenia zamestnancov", true);
           }
           
       }
       
       private class DialogNastaveniaZamestnancov extends Dialog{
           private HashMap<Integer,Choice[]> odpovede;
           
           DialogNastaveniaZamestnancov(JFrame vlastnik,Sablony.SablonaZamestnancov zamestnanci){
                super(vlastnik, "Dialog nastavenia zamestnancov", true);
                int pocetZamestnancov = zamestnanci.pocetZamestnancov();
                this.setSize(650,600);
                JPanel panel = new JPanel();
                JScrollPane scroll = new JScrollPane(panel);
                this.add(scroll);
                
               
                panel.setLayout(new GridLayout(pocetZamestnancov+2,6,5,5));
               
                //this.setLayout(new GridLayout(pocetZamestnancov+2,6,5,5));
                panel.setPreferredSize(new Dimension(600, 50*(pocetZamestnancov+2)));
               
                this.setModal(true);
                this.odpovede = new HashMap<Integer,Choice[]>();
                
                //prvy riadok
                panel.add(new JLabel("ID zamestnanca"));
                panel.add(new JLabel("Meno zamestnanca"));
                panel.add(new JLabel("Priezvisko zamestnanca"));
                panel.add(new JLabel("Zvol typ času"));
                panel.add(new JLabel("Počet hodín"));
                panel.add(new JLabel("Počet minút"));
                
                for(Sablony.Zamestnanec iterator: zamestnanci.getZamestnanciVSablone()){
                    panel.add(new JLabel(""+iterator.getIDZamestnanca()));
                    panel.add(new JLabel(iterator.getMenoZamestnanca()));
                    panel.add(new JLabel(iterator.getPriezviskoZamestnanca()));
                    
                    Choice[] odpovedZamestnanca = new Choice[3];
                    odpovedZamestnanca[0] = new Choice();
                    odpovedZamestnanca[0].addItem(InformacnaStruktura.TypSalda.NADPOCETNE.toString());
                    odpovedZamestnanca[0].addItem(InformacnaStruktura.TypSalda.NEDOPOCETNE.toString());
                    panel.add(odpovedZamestnanca[0]);
                    
                    odpovedZamestnanca[1] = new Choice();
                    for(int i = 0; i<24; i++){
                        odpovedZamestnanca[1].addItem(""+i);
                    }
                    panel.add(odpovedZamestnanca[1]);
                    
                    odpovedZamestnanca[2]= new Choice();
                    for(int i = 0; i<60; i++){
                        odpovedZamestnanca[2].addItem(""+i);
                    }
                    panel.add(odpovedZamestnanca[2]);
                    
                    this.odpovede.put(iterator.getIDZamestnanca(), odpovedZamestnanca);
                }
                
                JButton buttonPotvrd = new JButton("Potvrď");
                JButton buttonOdid = new JButton("Odíď");
                //posledny riadok
                panel.add(buttonPotvrd);
                panel.add(buttonOdid);
                panel.add(new JLabel(""));
                panel.add(new JLabel(""));
                panel.add(new JLabel(""));
                panel.add(new JLabel(""));
                
                 buttonPotvrd.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						dispose();
					}
				});
                 buttonOdid.addActionListener(new ActionListener() { 											
					public void actionPerformed(ActionEvent e) {
						odpovede = null;
                                                dispose();
					}
				});
                
           }
           
           public HashMap<Integer,Integer[]> getOdpovede(){
               HashMap<Integer,Integer[]> navrat = new HashMap<Integer,Integer[]>();
               for(Integer iterator: this.odpovede.keySet()){
                  Integer[] prevod = new Integer[3];
                  Choice[] odpoved = this.odpovede.get(iterator);
                  if(odpoved[0].getSelectedItem().equals(InformacnaStruktura.TypSalda.NADPOCETNE.toString())){
                      prevod[0] = 1;
                  }else if(odpoved[0].getSelectedItem().equals(InformacnaStruktura.TypSalda.NEDOPOCETNE.toString())){
                      prevod[0] = -1;
                  }else return null;
                  
                  prevod[1] = Integer.parseInt(odpoved[1].getSelectedItem());
                  prevod[2] = Integer.parseInt(odpoved[2].getSelectedItem());
                  navrat.put(iterator, prevod);
               }
               
               return navrat;
           }
       }
       
}
